import thenFs from 'then-fs'
import fs from 'fs'

/**
 * 异步读取文件
 * @param fpath 文件路径
 */
function getFile(fpath) {
  /**
   * @param resolve 调用 getFile()方法时, 通过 .then 指定的"成功的"回调函数
   * @param reject  调用 getFile()方法时, 通过 .then 指定的"失败的"回调函数
   */
  return new Promise((resolve, reject) => {
    fs.readFile(fpath, 'utf-8', (err, dataStr) => {
      if (err) {
        return reject(err)  // 如果读取失败, 则调用"失败的回调函数"
      }
      resolve(dataStr)      // 如果读取成功, 则调用"成功的回调函数"
    });
  })
}

// ENOENT: no such file or directory, open 'D:\WebstormProjects\js-learn\node\files\02.txt'
// getFile('./files/02.txt')
//   .then((res) => {
//     console.log(res)
//   })
//   .catch((err) => {
//     console.log('发生错误了')
//     console.log(err.message)
//   })
const gen = function* () {
  const f1 = yield getFile('./files/1.txt');
  const f2 = yield getFile('./files/2.txt');
  const f3 = yield getFile('./files/3.txt');
  console.log(f1.toString());
  console.log(f2.toString());
  console.log(f3.toString());

};

const newGen = gen();
newGen.next()
newGen.next()
newGen.next()

const asyncReadFile = async function () {
  const f1 = await getFile('./files/1.txt');
  const f2 = await getFile('./files/2.txt');
  const f3 = await getFile('./files/3.txt');
  console.log(f1.toString());
  console.log(f2.toString());
  console.log(f3.toString());
};


asyncReadFile()


// ENOENT: no such file or directory, open 'D:\WebstormProjects\js-learn\node\files\02.txt'
// getFile('./files/02.txt')
//   .then((res) => {
//     console.log(res)
//   }, (err) => {
//     console.log(err.message)
//   })


